#define DEBUG
#include <cstdio>

using namespace std;

typedef long long ll;

const int maxn=10000000, mods=1000000007;

int fact[2*maxn+1], unfact[2*maxn+1];

ll qpower(ll a, int n) {
  ll s=1;
  for (; n>1; n>>=1) {
    if (n&1) {
      s = s*a%mods;
    }
    a = a*a%mods;
  }
  return a*s%mods;
}

void initFact(int n) {
  fact[0] = 1;
  for (int i=1; i<=n; i++) {
    fact[i] = (ll)fact[i-1]*i%mods;
  }
  unfact[n] = qpower(fact[n], mods-2);
  for (int i=n; i>0; i--) {
    unfact[i-1] = (ll)unfact[i]*i%mods;
  }
}

ll C(int n, int m) {
  if (m<0) {
    return 0;
  }
  return fact[n]*unfact[n-m]%mods*unfact[m]%mods;
}

int main() {
#ifdef DEBUG
  freopen("src.in", "r", stdin);
  freopen("src.out", "w", stdout);
#endif

  int n, a, q;
  scanf("%d %d %d", &n, &a, &q);
  initFact(2*n);

  if (a<q) {
    printf("0");
  }

  static ll f[maxn+1];
  for (int i=1; i<=a && i<q; i++) {
    f[i] = ((C(2*i-1, i-1)+mods-C(2*i-1, i-2))%mods*fact[n-a]*unfact[n-a-i]%mods*fact[a]%mods*unfact[a-i-1]%mods+f[i-1])%mods;
  }
  printf("%lld", (fact[n]+mods-f[q-1])%mods);

  fclose(stdin);
  fclose(stdout);
  return 0;
}
